// Copyright (C) 2014-2021  CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//

#ifndef GeomAPI_Wire_H_
#define GeomAPI_Wire_H_

#include "GeomAPI_Shape.h"

class GeomAPI_Pnt;

/// \class GeomAPI_Wire
/// \ingroup DataModel
/// \brief Interface to the wire object
class GeomAPI_Wire: public GeomAPI_Shape
{
public:
  /// Makes an undefined Wire.
  GEOMAPI_EXPORT GeomAPI_Wire();

  /// Creation of wire by the wire-shape
  GEOMAPI_EXPORT GeomAPI_Wire(const std::shared_ptr<GeomAPI_Shape>& theShape);

  /// Returns "closed" status of the wire
  GEOMAPI_EXPORT bool isClosed() const;

  /// Returns \c true if the wire is a polygon
  /// \param[out] thePoints  vertices of the polygon
  GEOMAPI_EXPORT bool isPolygon(std::list<std::shared_ptr<GeomAPI_Pnt> >& thePoints) const;

  /// Returns \c true if the wire is a rectangle
  /// \param[out] thePoints  corners of the rectangle
  GEOMAPI_EXPORT bool isRectangle(std::list<std::shared_ptr<GeomAPI_Pnt> >& thePoints) const;

  /// Return middle point on the wire
  GEOMAPI_EXPORT virtual std::shared_ptr<GeomAPI_Pnt> middlePoint() const;
};

typedef std::shared_ptr<GeomAPI_Wire> GeomWirePtr;

#endif
